package com.lmx.messagetemplate.ui.activity;

import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.textfield.TextInputEditText;
import com.google.gson.Gson;
import com.lmx.messagetemplate.App;
import com.lmx.messagetemplate.R;
import com.lmx.messagetemplate.bean.Message;
import com.lmx.messagetemplate.bean.MessageEvent;
import com.lmx.messagetemplate.bean.MessageTemplate;

import org.apache.commons.lang3.StringUtils;
import org.greenrobot.eventbus.EventBus;
import org.litepal.LitePal;
import org.litepal.crud.LitePalSupport;

import java.util.List;
import java.util.Locale;

public class ReplaceContentActivity extends AppCompatActivity {

    public static final String TAG = "测试";

    private TextInputEditText etReplaceContent;
    private Button btnFinish;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_replace_content);
        initView();
        initEvent();
    }

    private void initView() {
        etReplaceContent = findViewById(R.id.et_replaceContent);
        btnFinish = findViewById(R.id.btn_finish);
    }

    private void initEvent() {
        btnFinish.setOnClickListener(v -> {
            String content = etReplaceContent.getText().toString().trim().replace("\n", "");
            // 上一个页面返回来的消息模板
            MessageTemplate messageTemplate = getMessageTemplate();
            List<Message> messages = messageTemplate.getData();
            // 循环判断是否是多行数据
            while (content.contains(";")) {
                // 提取要替换的数据
                int index = content.indexOf(";");
                String replace = content.substring(0, index);
                // 创建数据
                MessageTemplate template = new MessageTemplate();
                template.setTemplateTitle(messageTemplate.getTemplateTitle());
                template.setMessageTemplate(messageTemplate.getMessageTemplate());
                Message msg = new Message();
                msg.setReplaceContent(replace);
                // 判断替换数据是否成功
                if (replaceContent(template, msg)) {
                    messages.add(msg);
                    content = content.substring(index + 1);
                } else {
                    messages.clear();
                    Log.d(TAG, "替换失败");
                    Toast.makeText(this, "生成数据失败！请检查格式是否正确！", Toast.LENGTH_SHORT).show();
                }
            }
            // 为最后一条数据或第一条数据替换内容
            MessageTemplate template = new MessageTemplate();
            template.setTemplateTitle(messageTemplate.getTemplateTitle());
            template.setMessageTemplate(messageTemplate.getMessageTemplate());
            Message msg = new Message();
            msg.setReplaceContent(content);
            if (replaceContent(template, msg)) {
                messages.add(msg);
                messageTemplate.setData(messages);
                Log.d(TAG, "messageTemplate:" + messageTemplate);
                // 保存数据
                messageTemplate.save();
                LitePal.saveAll(messageTemplate.getData());
                // 传递数据给首页
                EventBus.getDefault().post(new MessageEvent(messageTemplate));
                finish();
                Toast.makeText(this, "数据生成成功！", Toast.LENGTH_SHORT).show();
            } else {
                Log.d(TAG, "替换失败");
                messages.clear();
                Toast.makeText(this, "生成数据失败！请检查格式是否正确！", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private MessageTemplate getMessageTemplate() {
        return (MessageTemplate) getIntent().getSerializableExtra("template");
    }

    /**
     * 替换内容
     * @param template 消息模板
     * @param message 替换的消息
     * @return 替换是否成功 true为成功，false为失败
     */
    public boolean replaceContent(MessageTemplate template, Message message) {
        template.setMessageTemplate(template.getMessageTemplate().replaceAll("X", "%s"));
        if (StringUtils.isNotBlank(message.getReplaceContent()) && message.getReplaceContent().contains("+")) {
            String[] data = message.getReplaceContent().split("\\+");
            message.setResult(String.format(Locale.CHINA, template.getMessageTemplate(), (Object[]) data));
            return true;
        }
        return false;
    }

}